package com.luo;

import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.processor.PageProcessor;
import us.codecraft.webmagic.selector.Html;
import us.codecraft.webmagic.selector.Selectable;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * webmagic  使用java原生开发方式
 * 核心很简单，功能性给简单行让步
 * 四个核心组件
 * PageProcessor 负责解析页面
 * Scheduler 负责管理待出去的URL
 * Pipeline 负责抽取结果处理，做持久化到数据库操作
 * DownLoader 负责从网上下载页面
 * @author luo
 */
public class MegicFetch implements PageProcessor {


    //抓取网站的配置
    private Site site = Site.me()
            .setCharset("UTF-8")    //设置爬取编码集
            .setTimeOut(6000)   //设置超时时间
            .setRetrySleepTime(1000)    //设置重试时间
            .setSleepTime(1000); //设置休眠时间


    //编写爬虫逻辑
    @Override
    public void process(Page page) {
        //通过page获取到Downloader下载下来的页面Url
        Selectable url = page.getUrl();
        System.out.println(url);
        if(url.regex("http://www.taohaoma.com/mobile/number\\?p=1&order=").match()){
            //开始抓取有用信息
			System.out.println("匹配成功");
            //获取页面信息
            Html html = page.getHtml();
			//System.out.println(html);  jQuery
            //通过Xpath去解析Html  XPath是W3C XSLT标准的主要元素   还是一门在XML文档中查找信息的语言
            //XQuery和Xpointer都是构建与XPath之上
            List<String> list = html.xpath("[@id='f12']/table/tbody/tr/td[1]/a").all();
            //将文件存到本地
            //downPhoneNumber(list);

            for (String string : list) {
                System.out.println(string);
            }
            toFile(list);
        }
    }

    public void toFile(List<String> ls) {
        File f = new File("F:/MagicFecth.txt");
        PrintWriter pw = null;

        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream(f);
            pw = new PrintWriter(fos,true);
            for (String str: ls) {

            }
            System.out.println("文件写入完成");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } finally{
            if(pw !=null) { pw.close(); }
        }


    }

    @Override
    public Site getSite() {
        return site;
    }

    public static void main(String[] args) {
        Spider.create(new MegicFetch())
                .thread(1)
                .addUrl("http://www.taohaoma.com/mobile/number?p=1&order=")
                .run();
        //注意这里不是start()
        //这个语句运行后，网页就已经抓取到process方法了

    }
}
